package servico;

import hibernate.dao.ServicoDAO;
import hibernate.entity.Servico;
import hibernate.entity.ServicoProduto;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class ProdutoGastosTableModel extends AbstractTableModel{
	
	private final int COL_ID_PRODUTO = 0;
    private final int COL_NOME_PRODUTO = 1;
    private final int COL_MARCA_PRODUTO = 2;
    private final int COL_HOMEM = 3;
    private final int COL_MULHER_CURTO = 4;
    private final int COL_MULHER_MEDIO = 5;
    private final int COL_MULHER_COMPRIDO = 6;
    private final int COL_UNIDADE = 7;

    private Servico servico;
 
    public ProdutoGastosTableModel(Long id) {
    	servico = new Servico();
        ServicoDAO servicoDAO = new ServicoDAO();
    	servico =  servicoDAO.getProdutosEGastos(id);
    }
 
    public int getRowCount() {
        return servico.getServicosProdutos().size();
    }
 
    public int getColumnCount() {
        return 8;
    }
 
    @Override
    public String getColumnName(int column) {

    	if (column == COL_ID_PRODUTO) {
            return "codigo";
        } else if (column == COL_NOME_PRODUTO) {
            return "Produto";
        } else if (column == COL_MARCA_PRODUTO) {
            return "Marca";
        } else if (column == COL_HOMEM) {
            return "Homem";
        } else if (column == COL_MULHER_CURTO) {
            return "Mulher Curto";
        } else if (column == COL_MULHER_MEDIO) {
            return "Mulher Medio";
        } else if (column == COL_MULHER_COMPRIDO) {
            return "Mulher Comprido";
        } else if (column == COL_UNIDADE) {
            return "Unidade";
        }
        return "";
    }
 
    @Override
    public Class getColumnClass(int columnIndex) {

    	if (columnIndex == COL_ID_PRODUTO) {
            return Long.class;
        } else if (columnIndex == COL_NOME_PRODUTO) {
            return String.class;
        } else if (columnIndex == COL_MARCA_PRODUTO) {
            return String.class;
        } else if (columnIndex == COL_HOMEM) {
            return Double.class;
        } else if (columnIndex == COL_MULHER_CURTO) {
            return Double.class;
        } else if (columnIndex == COL_MULHER_MEDIO) {
            return Double.class;
        } else if (columnIndex == COL_MULHER_COMPRIDO) {
            return Double.class;
        } else if (columnIndex == COL_UNIDADE) {
            return Integer.class;
        } 
        return String.class;
    }
 
    public Object getValueAt(int rowIndex, int columnIndex) {

        ServicoProduto sp = servico.getServicosProdutos().get(rowIndex);

       	if (columnIndex == COL_ID_PRODUTO) {
            return sp.getProduto().getId();
        } else if (columnIndex == COL_NOME_PRODUTO) {
            return sp.getProduto().getNomeProduto();
        } else if (columnIndex == COL_MARCA_PRODUTO) {
            return sp.getProduto().getMarca();
        } else if (columnIndex == COL_HOMEM) {
            return sp.getProdutoHomem();
        } else if (columnIndex == COL_MULHER_CURTO) {
            return sp.getProdutoMulherCurto();
        } else if (columnIndex == COL_MULHER_MEDIO) {
            return sp.getProdutoMulherMedio();
        } else if (columnIndex == COL_MULHER_COMPRIDO) {
            return sp.getProdutoMulherComprido();
        } else if (columnIndex == COL_UNIDADE) {
            return sp.getUnidade();
        }
        return "";
    }    

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

        ServicoProduto sp = servico.getServicosProdutos().get(rowIndex);
 
        if (columnIndex == COL_ID_PRODUTO) {
            sp.getProduto().setId(Long.parseLong(aValue.toString()));
        } else if (columnIndex == COL_NOME_PRODUTO) {
            sp.getProduto().setNomeProduto(aValue.toString());
        } else if (columnIndex == COL_MARCA_PRODUTO) {
            sp.getProduto().setMarca(aValue.toString());
        } else if (columnIndex == COL_HOMEM) {
            sp.setProdutoHomem(Double.parseDouble(aValue.toString()));
        } else if (columnIndex == COL_MULHER_CURTO) {
            sp.setProdutoMulherCurto(Double.parseDouble(aValue.toString()));
        } else if (columnIndex == COL_MULHER_MEDIO) {
            sp.setProdutoMulherMedio(Double.parseDouble(aValue.toString()));
        } else if (columnIndex == COL_MULHER_COMPRIDO) {
            sp.setProdutoMulherComprido(Double.parseDouble(aValue.toString()));
        } else if (columnIndex == COL_UNIDADE) {
            sp.setUnidade(Integer.parseInt(aValue.toString()));
        }        
        fireTableDataChanged();
    } 
    
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }    
     
  /*  public void ordenarPorNome() {
        //ordena pelo nome
        Collections.sort(listaServicos, new Comparator<Servico>() {
     
            public int compare(Servico s1, Servico s2) {
                return s1.getId_servico().compareTo(s2.getId_servico());
            }
        });
     
        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }*/
    /* 
    public void ordenarPorQuantidade() {
        //ordena pelo nome
        Collections.sort(listaProdutos, new Comparator<Produto>() {
     
            public int compare(Produto o1, Produto o2) {
                return o1.getQuant() - o2.getQuant();
            }
        });
     
        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }*/
}
